home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagg_m.zip / MEMORY.SWG / 0040_Line Memory.pas < prev    next >
Pascal/Delphi Source File  |  1994-01-27  |  2KB  |  41 lines

  1. {
  2. -> All you need to access flat memory is to make sure you get two segmen
  3. -> up against each other when you allocate them. The Windows API has
  4. -> GlobalAllocPtr for this type of huge memory allocation, but I'm not s
  5. -> you'd go about it in DOS (non-protected) mode except to compare the s
  6. -> after GetMem() and see if they are linear/sequential. (and hope V86 m
  7. -> handle translation to actual physical memory!)
  8.  
  9. > If that is the case then look up the ABSOLUTE clause in your Pascal
  10. > manual. It will tell you how to make a second variables address be
  11. > Absolutely relative to the firstone; no matter what. The address for
  12. > the second one will be based on the address for the original.
  13.  
  14. Correct. Absolutely at the same address as the other variable.
  15.  
  16. At this time, BP won't let you add or subtract offsets from the address you
  17. give to the Absolute clause. Unless possibly it's a constant address. In any
  18. case, it's not ACCESSING memory linearly that is the problem, it's getting the
  19. operating system or runtime library to ALLOCATE it linearly.
  20.  
  21. Protected mode has the WinAPI unit that lets you deal with huge memory blocks
  22. and other stuff. That is what is needed.
  23.  
  24. In real mode all you can do is:
  25. }
  26.  
  27. var p,p2,tmp:pointer;
  28.  
  29. begin  {make sure 2 memory blocks are linear}
  30.  getmem(p,$C000);  {48K}
  31.  getmem(p2,$C000); {96K total}
  32.  while (seg(p2^)-seg(p^))*$1000+(ofs(p2^)-ofs(p^))<>$C000 do begin
  33.   freeMem(p2,$C000);
  34.   freeMem(p,$C000);
  35.   writeln('Not linear... trying again.');
  36.   getmem(tmp,1);
  37.   getmem(p,$C000);
  38.   getmem(p2,$C000);
  39.   end;
  40.  end;
  41.